package interfaz;

import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import modelo.CentroEstudios;
import modelo.Usuario;

import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.sql.SQLException;
import java.awt.event.ActionListener;
import java.beans.PropertyVetoException;

import javax.swing.JButton;
import javax.swing.JLabel;

public class VMain extends JFrame {

	private CentroEstudios centroEstudios;
	private JMenu mnUsuarios;
	private Usuario usu;
	private int permisos;
	private JMenuItem mntmAltaUsuarios;
	private JMenuItem mntmVerUsuarios;
	private JMenuItem mntmGestinSolicitudes;
	public static String nombreClase; 

	/**
	 * Create the frame.
	 * @param centroEstudios 
	 * @param usu 
	 */
	public VMain(CentroEstudios centroEstudios, Usuario usu) {
		
		this.centroEstudios = centroEstudios;
		this.usu = usu;
		setTitle("CENTRO DE ESTUDIOS");
		
		// Volcamos la BD en los Vectores para trabajar con ellos
		try {
			this.centroEstudios.cargarAulas();
			this.centroEstudios.cargarEquipos();
			this.centroEstudios.cargarHardware();
			this.centroEstudios.cargarTiposHard();
			this.centroEstudios.cargarSoftware();
			this.centroEstudios.cargarSolicitud();
		} catch (SQLException e1) {
			e1.printStackTrace();
		}
		
		this.permisos = establecerPermisos(usu);
		
		System.out.println("permisos = "+permisos);
		addWindowListener(new WindowAdapter() {
			@Override
			public void windowClosing(WindowEvent e) {
				VMain.this.centroEstudios.cerrarConexion();
				System.exit(0);
			}
		});
		
		//this.setExtendedState(JFrame.MAXIMIZED_BOTH);
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 894, 576);
		
		JMenuBar menuBar = new JMenuBar();
		setJMenuBar(menuBar);
		
		JMenu mnAulas = new JMenu("Aulas");
		mnAulas.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				VAulas vAulas = new VAulas(VMain.this.centroEstudios);
				vAulas.setVisible(true);
				getContentPane().add(vAulas);
			}
		});
		menuBar.add(mnAulas);
		
		JMenuItem mntmAadirAula = new JMenuItem("Añadir aula");
		mntmAadirAula.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				VAulas vAulas = new VAulas(VMain.this.centroEstudios);
				vAulas.setVisible(true);
				getContentPane().add(vAulas);
				try {
					vAulas.setMaximum(true);
				} catch (PropertyVetoException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		});
		mnAulas.add(mntmAadirAula);
		
		JMenu mnEquipos = new JMenu("Equipos");
		menuBar.add(mnEquipos);
		
		JMenuItem mntmNewMenuItem = new JMenuItem("Nuevo equipo");
		mntmNewMenuItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				VAnadirEquipos vAnadirEquipos = new VAnadirEquipos(VMain.this.centroEstudios);
				vAnadirEquipos.setVisible(true);
				getContentPane().add(vAnadirEquipos);
				try {
					vAnadirEquipos.setMaximum(true);
				} catch (PropertyVetoException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		});
		mnEquipos.add(mntmNewMenuItem);
		
		JMenu mnComponentes = new JMenu("Componentes");
		menuBar.add(mnComponentes);
		
		JMenuItem mntmAadirHardware = new JMenuItem("Añadir Hardware");
		mntmAadirHardware.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				VAnadirHard vAnadirHard = new VAnadirHard(VMain.this.centroEstudios);
				vAnadirHard.setVisible(true);
				getContentPane().add(vAnadirHard);
				try {
					vAnadirHard.setMaximum(true);
				} catch (PropertyVetoException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		});
		mnComponentes.add(mntmAadirHardware);
		
		JMenuItem mntmAadirSoftware = new JMenuItem("Añadir Software");
		mntmAadirSoftware.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				VAnadirSoft vAnadirSoft = new VAnadirSoft(VMain.this.centroEstudios);
				vAnadirSoft.setVisible(true);
				getContentPane().add(vAnadirSoft);
				try {
					vAnadirSoft.setMaximum(true);
				} catch (PropertyVetoException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		});
		mnComponentes.add(mntmAadirSoftware);
		
		JMenu mnSolicitudes = new JMenu("Solicitudes");
		menuBar.add(mnSolicitudes);
		
		JMenuItem mntmNuevaSol = new JMenuItem("Nueva solicitud");
		mntmNuevaSol.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				VAnadirSolicitud vAnadirSolicitud = new VAnadirSolicitud(VMain.this.centroEstudios, VMain.this.usu);
				vAnadirSolicitud.setVisible(true);
				getContentPane().add(vAnadirSolicitud);
				try {
					vAnadirSolicitud.setMaximum(true);
				} catch (PropertyVetoException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		});
		mnSolicitudes.add(mntmNuevaSol);
		
		mntmGestinSolicitudes = new JMenuItem("Gestión solicitudes");
		mntmGestinSolicitudes.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				if(mntmGestinSolicitudes.isEnabled()){
					VAtendSol vAtendSol = new VAtendSol(VMain.this.centroEstudios);
					vAtendSol.setVisible(true);
					getContentPane().add(vAtendSol);
					try {
						vAtendSol.setMaximum(true);
					} catch (PropertyVetoException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
		});
		mnSolicitudes.add(mntmGestinSolicitudes);
		
		JMenu mnNewMenu = new JMenu("Consultas");
		menuBar.add(mnNewMenu);
		
		JMenuItem mntmNewMenuItem_1 = new JMenuItem("Consulta");
		mntmNewMenuItem_1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				VConsulta vConsulta = new VConsulta(VMain.this.centroEstudios);
				vConsulta.setVisible(true);
				getContentPane().add(vConsulta);
				try {
					vConsulta.setMaximum(true);
				} catch (PropertyVetoException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		});
		mnNewMenu.add(mntmNewMenuItem_1);
		
		mnUsuarios = new JMenu("Usuarios");
		menuBar.add(mnUsuarios);
		
		mntmAltaUsuarios = new JMenuItem("Alta usuarios");
		mntmAltaUsuarios.addMouseListener(new MouseAdapter() {
			@Override
			public void mousePressed(MouseEvent e) {
				if(mntmAltaUsuarios.isEnabled()){
					VAltaUsuario vAltaUsuario = new VAltaUsuario(VMain.this.centroEstudios);
					vAltaUsuario.setVisible(true);
					getContentPane().add(vAltaUsuario);
				}
			}
		});
		mnUsuarios.add(mntmAltaUsuarios);
		
		mntmVerUsuarios = new JMenuItem("Ver usuarios");
		mntmVerUsuarios.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				if(mntmVerUsuarios.isEnabled()){
					VConsultaUsuarios vConsultaUsuarios = new VConsultaUsuarios(VMain.this.centroEstudios);
					vConsultaUsuarios.setVisible(true);
					getContentPane().add(vConsultaUsuarios);
					try {
						vConsultaUsuarios.setMaximum(true);
					} catch (PropertyVetoException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
		});
		mnUsuarios.add(mntmVerUsuarios);
		getContentPane().setLayout(null);
		
		JLabel lblUsuario = new JLabel("");
		lblUsuario.setBounds(27, 462, 391, 15);
		getContentPane().add(lblUsuario);
		
		JLabel lblRol = new JLabel("");
		lblRol.setBounds(27, 489, 346, 15);
		getContentPane().add(lblRol);
		
		JButton btnCerrarSesin = new JButton("Cerrar sesión");
		btnCerrarSesin.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				VLogin vLogin = new VLogin(VMain.this.centroEstudios);
				vLogin.setVisible(true);
				VMain.this.dispose();
			}
		});
		btnCerrarSesin.setBounds(658, 479, 146, 25);
		getContentPane().add(btnCerrarSesin);
		
		switch (this.permisos) {
		case 0:
			lblUsuario.setText("Bienvenido " + usu.getIdUsuario());
			lblRol.setText("ROL: " + nombreClase);
			break;
		case 1:
			lblUsuario.setText("Técnico");
			mntmAltaUsuarios.setEnabled(false);
			break;
		case 2:
			lblUsuario.setText("Usuario");
			mntmAltaUsuarios.setEnabled(false);
			mntmGestinSolicitudes.setEnabled(false);
			mntmVerUsuarios.setEnabled(false);
			break;
		}
	}

	/**
	 * Devuelve 0 su es administrador, 1 su es tecnico y 2 si es usuario
	 * @param usu
	 * @return
	 */
	public static int establecerPermisos(Usuario usu){
		nombreClase = usu.getClass().getName().substring(usu.getClass().getName().lastIndexOf(".")+1);
		System.out.println(nombreClase);
		if (nombreClase.equalsIgnoreCase("administrador")){
			return 0;
		}else if (nombreClase.equalsIgnoreCase("tecnico")){
			return 1;
		}else{
			return 2;
		}
	}
}
